package com.common.tools;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期时间工具类
 * 
 * @author chenlujun
 * @version [版本号, 2014-10-29]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public abstract class TimeTools {

	/**
	 * 默认日期格式：yyyy-MM-dd HH:mm:ss
	 */
	public static String DATE_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 获取当前时间
	 * 
	 * @return 当前时间 yyyy-MM-dd HH:mm:ss
	 * @see [类、类#方法、类#成员]
	 */
	public static String now() {
		Date date = new Date();

		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		return format.format(date);
	}

	/**
	 * 按照格式获取当前时间,时间格式 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param format
	 * @return
	 * @see [类、类#方法、类#成员]
	 */
	public static String now(String format) {
		Date date = new Date();

		SimpleDateFormat dformat = new SimpleDateFormat(format);

		return dformat.format(date);
	}

	/**
	 * 按照指定格式转换为日期对象
	 * 
	 * @param dateStr
	 * @param format
	 * @return
	 * @see [类、类#方法、类#成员]
	 */
	public static Date toDate(String dateStr, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date;
		try {
			date = sdf.parse(dateStr);
		} catch (ParseException e) {
			return null;
		}
		return date;
	}

	/**
	 * 日期比较，返回传入日期距当前的天数、小时、分钟、秒中
	 * 
	 * @param date
	 * @return String 返回时间间隔字符串
	 * @see [类、类#方法、类#成员]
	 */
	public static String compareDate(Date date) {
		Date now = new Date();
		long interval = (now.getTime() - date.getTime()) / 1000; // 时间间隔 秒数

		int k = 3600 * 24;
		// 相隔天数
		long d = interval / k;

		// 相隔月数
		long month = d / 30;

		// 相隔年数
		long year = month / 12;

		// 相隔小时
		long h = (interval - (d * k)) / 3600;
		// 相隔分钟数
		long m = (interval - (d * k) - h * 3600) / 60;
		// 相隔秒数
		long s = (interval - (d * k) - h * 3600 - m * 60);

		if (year >= 1) {
			return year + "年前";

		} else if ((year < 1 && year >= 0)) {
			if (month >= 1 && month < 12) {
				return month + "月前";
			} else if ((month < 1 && month >= 0)) {
				if ((d >= 1 && d < 30)) {
					return d + "天前";
				} else if ((d < 1 && d >= 0)) {
					if ((h >= 1 && h < 24)) {
						return h + "小时前";
					} else if ((h < 1 && h >= 0)) {
						if ((m >= 1 && m < 60)) {
							return m + "分钟前";
						} else if (s >= 1 && s < 60) {
							return s + "秒钟前";
						} else
							return 0 + "秒钟前";
					}
				}
			}
		}
		return DATE_FORMAT_DEFAULT;
	}

	// public static void main(String[] args) {
	// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	// Date time = null ;
	// try {
	// time= df.parse("2014-12-05 16:35:56");
	// } catch (ParseException e) {
	// e.printStackTrace();
	// }
	// String dateStr=compareDate(time);
	// System.out.println(dateStr);
	// }

	/**
	 * 得到某一天是星期几
	 * 
	 * @param dateStr
	 *            日期， yyyy-MM-dd
	 * @return 1:星期一 2：星期二 3：星期三 4：星期四 5：星期五 6：星期六 7：星期日
	 * @see [类、类#方法、类#成员]
	 */
	public static int week(String dateStr) {

		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Calendar c = Calendar.getInstance();
		try {
			c.setTime(format.parse(dateStr));
		} catch (ParseException e) {
			return 0;
		}
		int dayForWeek = 0;
		if (c.get(Calendar.DAY_OF_WEEK) == 1) {
			dayForWeek = 7;
		} else {
			dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
		}
		return dayForWeek;
	}

	/**
	 * 根据传进来的日期对象转换为字符串格式日期
	 * 
	 * @param date
	 * @param format
	 * @return
	 * @see [类、类#方法、类#成员]
	 */
	public static String getDateFormat  (Date date, String format) {
		SimpleDateFormat formatD = new SimpleDateFormat(format);
		return formatD.format(date);
	}

}
